package ar.edu.utn.frgp.banco.servlets;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.edu.utn.frgp.banco.domain.Cliente;
import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.Movimientos;
import ar.edu.utn.frgp.banco.service.RecursoServiceCuenta;
import ar.edu.utn.frgp.banco.service.RecursoServiceMovimientos;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceCuentaImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceMovimientosImpl;
import ar.edu.utn.frgp.banco.servlets.scope.CuentaBean;
import ar.edu.utn.frgp.banco.servlets.scope.MessageBean;

/**
 * Servlet implementation class OperacionServlet
 */
public class AltaOperacionServlet extends GenericServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public AltaOperacionServlet() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public void realizarAccion(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		
		Cuenta cuorigen = new Cuenta();
		Cuenta cuorigenAux = new Cuenta();
		RecursoServiceCuenta serviceCuenta = new RecursoServiceCuentaImpl();
		
		Movimientos regMovimiento = new Movimientos();
		RecursoServiceMovimientos serviceMovimientos = new RecursoServiceMovimientosImpl();
		
		String tipoOperacion= (String) req.getParameter("operacion");
		String nroDeCuenta    = (String)req.getParameter("nrocuenta");
		String CantMonto = (String)req.getParameter("monto");
		int operacion = Integer.parseInt(tipoOperacion);
		int cuenta =Integer.parseInt(nroDeCuenta);
		double monto = Double.parseDouble(CantMonto);
		double nuevomonto;
		String jsp = "";
		
		
		//Ver si puede operar hacer calculos
		cuorigenAux = serviceCuenta.buscarCuenta(cuenta);  
		cuorigenAux.setSaldo(cuorigenAux.getSaldo()-monto); 

		nuevomonto= cuorigenAux.getSaldo();
		
		if(operacion==0 && nuevomonto<0)
		{
			MessageBean bean = new MessageBean();
			bean.setMensaje("El Monto que desea extraer supera a su monto disponible");
			req.setAttribute("msjBean", bean);
			jsp = "Operaciones2AltaOperaciones.jsp";
		//volver a mandar los datos de cuenta para poder volver a operar
			Cliente elCliente = (Cliente) req.getSession().getAttribute("cliente");
			
			req.getSession().setAttribute("cliente", elCliente);
			
			
			List<Cuenta> cuentas = new ArrayList<Cuenta>();		
			cuentas = serviceCuenta.listarCuentasActivas(elCliente.getDni());
			
			CuentaBean beancuenta = new CuentaBean();
	        beancuenta.setCuentas(cuentas);
			
			req.setAttribute("beancuenta", beancuenta);
			
			req.getRequestDispatcher(jsp).forward(req, resp);
		}
		
		else
		{
		
		if(operacion==0)
			{//hacer la extraccion
			cuorigen = serviceCuenta.buscarCuenta(cuenta);  
			cuorigen.setSaldo(cuorigen.getSaldo()- monto); 
			
			serviceCuenta.modificarSaldoCuenta(cuorigen);
			
			regMovimiento.cargarMovimiento(cuenta, 1, 1, cuorigen.getSaldo(),monto);
			
			serviceMovimientos.registrarMovimiento(regMovimiento);
			
			jsp = "menuoperaciones.jsp";
			req.getRequestDispatcher(jsp).forward(req, resp);
			
			}	
		if(operacion==1)
			{// hacer el deposito
			cuorigen = serviceCuenta.buscarCuenta(cuenta);  
			cuorigen.setSaldo(cuorigen.getSaldo()+ monto); 
			
			serviceCuenta.modificarSaldoCuenta(cuorigen);
			
			regMovimiento.cargarMovimiento(cuenta, 2, 1, cuorigen.getSaldo(),monto);
			
			serviceMovimientos.registrarMovimiento(regMovimiento);
			
			jsp = "menuoperaciones.jsp";
			req.getRequestDispatcher(jsp).forward(req, resp);
			
				
			
			}
		}
		
		
	}
	
}
		